//
//  DKCoverFlow.h
//  DKCoverFlow
//
//  Created by 许建勇 on 15/5/21.
//  Copyright (c) 2015年 许建勇. All rights reserved.
//

#import "DKView.h"

/**滑动阻力*/
static CGFloat kCoverFlowScrollPageDecelerationRate=0.3f;


//-------------------------------------------------------
#pragma mark - 基类Cell
@interface DKCoverFlowCell : DKView
/**
 *  复用标识
 */
@property (nonatomic,strong) NSString* reuseIdentifier;

/**
 *  当前下标
 */
@property (nonatomic,assign) NSInteger index;

/**
 *  根据复用标识初始化
 *
 *  @param reuseIdentifier 复用标志
 *
 *  @return 实例
 */
- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier;
@end
//-------------------------------------------------------





//-------------------------------------------------------
#pragma mark - DataSource
@class DKCoverFlow;
@protocol DKCoverFlowDataSource
@required
/**
 *  获取cell个数
 *
 *  @param coverFlow 流视图
 *
 *  @return 元素个数
 */
- (NSInteger)numberOfRowsInCoverFlow:(DKCoverFlow *)coverFlow;

/**
 *  获取cell实例
 *
 *  @param coverFlow 流视图
 *  @param index     当前下标
 *
 *  @return cell实例
 */
- (DKCoverFlowCell *)coverFlow:(DKCoverFlow *)coverFlow forIndex:(NSInteger)index;
@end




//-------------------------------------------------------
#pragma mark - Delegate
@protocol DKCoverFlowDelegate
@optional
/**
 *  经过的位置
 *
 *  @param coverFlow 流视图
 *  @param index     当前下标
 */
- (void)coverFlow:(DKCoverFlow *)coverFlow didScrollPassByIndex:(NSInteger)index;//非用户操作的滚动不会调用

/**
 *  最后停止的位置
 *
 *  @param coverFlow 流视图
 *  @param index     当前下标
 */
- (void)coverFlow:(DKCoverFlow *)coverFlow didScrollToIndex:(NSInteger)index;
@end








//-------------------------------------------------------
/**
 滚动方向的枚举值
 */
typedef enum
{
    /**
     *  水平方向
     */
    DKCoverFolowOrientationHorizontal=0,
    /**
     *  垂直方向
     */
    DKCoverFlowOrientationVertical
    
}DKCoverFolowOrientation;



/**
 *  流视图
 */
@interface DKCoverFlow : DKView<UIScrollViewDelegate>
{
    /**
     *  复用存放的数组
     */
    NSMutableArray *reusableCellArray;
    
    /**
     *  正在显示的数组
     */
    NSMutableArray *displayCellArray;
    
    /**
     *  当前显示的cell范围
     */
    NSRange visibleRange;
    
    /**
     *  页面数量
     */
    NSInteger pageNumber;
    
    /**
     *  上一次页面的序号，用于didScrollPassByIndex的实现
     */
    NSInteger lastIndex;
}

#pragma mark - Parameter
/**
 *  数据代理
 */
@property (nonatomic,weak) id<DKCoverFlowDataSource> dataSource;

/**
 *  事件代理
 */
@property (nonatomic,weak) id delegate;

/**
 *  可滑动的view
 */
@property (nonatomic,strong,readonly) UIScrollView *scrollView;

/**
 *  旋转方向
 */
@property (nonatomic,assign) DKCoverFolowOrientation orientation;

/**
 *  每个元素的宽高
 */
@property (nonatomic,assign) CGSize cellSize;

/**
 *  元素间的间隔
 */
@property (nonatomic,assign) CGFloat cellGap;


/**
 *  缩放因子
 */
@property (nonatomic,assign) CGFloat scaleKey;

/**
 *  缩放因子是否递归
 */
@property (nonatomic,getter=isEnableScaleRecursion,assign) BOOL enableScaleRecursion;

/**
 *  透明因子
 */
@property (nonatomic,assign) CGFloat alphaKey;

/**
 *  透明因子是否递归
 */
@property (nonatomic,assign,getter=isEnableAlphaRecursion) BOOL enableAlphaRecursion;

/**
 *  当前下标
 */
@property (nonatomic,assign) NSInteger index;

/**
 *  坐标修正
 */
@property (nonatomic,assign,getter=isPagingEnable) BOOL pagingEnable;



#pragma mark - API
/**
 *  根据id获取cell
 *
 *  @param identifier 服用标示
 *
 *  @return cell
 */
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;

/**
 *  滚到到指定row
 *
 *  @param row 下标
 */
- (void)scrollToRow:(NSInteger)row;

/**
 *  滚动到指定row
 *
 *  @param row        下标
 *  @param isAnimated 是否播放动画
 */
- (void)scrollToRow:(NSInteger)row Animated:(BOOL)isAnimated;

/**
 *  刷新视图
 */
- (void)reloadData;

/**
 *  刷新视图
 *
 *  @param index 待刷新cell坐标
 */
- (void)reloadDataWithIndex:(NSInteger)index;

/**
 *  获取指定位置cell
 *
 *  @param index 位置
 *
 *  @return cell
 */
- (DKCoverFlowCell *)cellForIndex:(NSInteger)index;


@end
